/**
 * 参数验证工具
 */

class Validator {
  /**
   * 验证手机号
   */
  static validatePhone(phone) {
    if (!phone) {
      throw new Error('手机号不能为空')
    }
    const phoneReg = /^[1][3,4,5,7,8,9][0-9]{9}$/
    if (!phoneReg.test(phone)) {
      throw new Error('手机号格式不正确')
    }
    return true
  }

  /**
   * 验证密码
   */
  static validatePassword(password) {
    if (!password) {
      throw new Error('密码不能为空')
    }
    if (password.length < 6 || password.length > 20) {
      throw new Error('密码长度应为6-20位')
    }
    const passwordReg = /^(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d@$!%*?&]{6,20}$/
    if (!passwordReg.test(password)) {
      throw new Error('密码应包含字母和数字')
    }
    return true
  }

  /**
   * 验证邮箱
   */
  static validateEmail(email) {
    if (!email) return true // 邮箱可选
    const emailReg = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/
    if (!emailReg.test(email)) {
      throw new Error('邮箱格式不正确')
    }
    return true
  }

  /**
   * 验证用户名
   */
  static validateUsername(username) {
    if (!username) {
      throw new Error('用户名不能为空')
    }
    if (username.length < 2 || username.length > 20) {
      throw new Error('用户名长度应为2-20位')
    }
    const usernameReg = /^[a-zA-Z0-9_\u4e00-\u9fa5]{2,20}$/
    if (!usernameReg.test(username)) {
      throw new Error('用户名只能包含字母、数字、下划线和中文')
    }
    return true
  }

  /**
   * 验证邀请码
   */
  static validateInviteCode(code) {
    if (!code) {
      throw new Error('邀请码不能为空')
    }
    if (code.length < 6 || code.length > 12) {
      throw new Error('邀请码格式不正确')
    }
    return true
  }

  /**
   * 验证验证码
   */
  static validateVerifyCode(code) {
    if (!code) {
      throw new Error('验证码不能为空')
    }
    if (!/^\d{6}$/.test(code)) {
      throw new Error('验证码应为6位数字')
    }
    return true
  }
}

module.exports = Validator

